import { Ref } from 'vue';

/**
 * 创建行合并逻辑的 hook
 * @param data 数据源
 * @param field 用于判断合并的字段名
 * @returns rowSpan 函数
 */
export function useRowSpan<T = any>(data: Ref<T[]> | T[], field: keyof T) {
  return ({ rowIndex, rowData }: { rowIndex: number; rowData: T }) => {
    const dataArray = Array.isArray(data) ? data : data.value;
    const currentValue = rowData[field];
    let spanCount = 1;

    // 向下查找相同值的行数
    for (let i = rowIndex + 1; i < dataArray.length; i++) {
      if (dataArray[i][field] === currentValue) {
        spanCount++;
      } else {
        break;
      }
    }

    // 如果是第一行相同数据，返回合并的行数；否则返回0（被合并）
    if (rowIndex === 0 || dataArray[rowIndex - 1][field] !== currentValue) {
      return spanCount;
    }
    return 0;
  };
}
